/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package co.uniandes.patrones.beans;

import co.uniandes.patrones.entidades.AdministradorSolicitudes;
import co.uniandes.patrones.entidades.AdministradorTalleres;
import co.uniandes.patrones.entidades.AdministradorUsuarios;
import co.uniandes.patrones.entidades.Cliente;
import co.uniandes.patrones.entidades.Solicitud;
import co.uniandes.patrones.entidades.Taller;
import co.uniandes.patrones.entidades.Vehiculo;
import java.util.ArrayList;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

/**
 *
 * @author alvar-go@uniandes.edu.co
 */
public class SeleccionTallerBean {

    public final static String INICIO= "ingreso";
    
    private final static String SELECCION_TALLER_CORRECTA = "versolicitudescliente";
    
    private final static String SELECCION_TALLER_INCORRECTA = "selecciontaller";

    private List<Taller> talleres;

    private List<String> talleresToString;
    
    private Cliente clienteActual;
    
    private Vehiculo vehiculo;

    private String tallerSeleccionadoToString;
    
    private AdministradorTalleres admin;
    
    private boolean requiereTransporte;

    private String identificacion;

    public SeleccionTallerBean() {
        talleres = new ArrayList<Taller>();
        admin = AdministradorTalleres.getInstancia();
        talleres = admin.getTalleres();
        talleresToString = admin.getTalleresToString();
        cargarDatos();
    }

    public SeleccionTallerBean(List<Taller> talleres, Cliente clienteActual, Vehiculo vehiculo) {
        this.talleres = talleres;
        this.clienteActual = clienteActual;
        this.vehiculo = vehiculo;
    }

    public List<String> getTalleresToString() {
        return talleresToString;
    }

    public String getTallerSeleccionadoToString() {
        return tallerSeleccionadoToString;
    }

    public void setTalleresToString(List<String> talleresToString) {
        this.talleresToString = talleresToString;
    }

    public void setTallerSeleccionadoToString(String tallerSeleccionadoToString) {
        this.tallerSeleccionadoToString = tallerSeleccionadoToString;
    }

     private void cargarDatos(){
        FacesContext context = FacesContext.getCurrentInstance();
        HttpSession sesion = (HttpSession) context.getExternalContext().getSession(false);
        if( sesion != null){
             AdministradorUsuarios ad = AdministradorUsuarios.getInstancia();
             clienteActual = (Cliente)ad.buscarUsuario((String)sesion.getAttribute(IngresoBean.SESION_LOGIN));
             vehiculo = clienteActual.darVehiculo((String)sesion.getAttribute(IngresarSolicitudBean.PLACA_SELECCIONADA));
             identificacion = clienteActual.getTipo() +":" + clienteActual.getLogin();
        }
    }

    public void setIdentificacion(String identificacion) {
        this.identificacion = identificacion;
    }

    public String getIdentificacion() {
        return identificacion;
    }
     
     public String terminarSesion(){
        FacesContext context = FacesContext.getCurrentInstance();
        HttpSession sesion = (HttpSession) context.getExternalContext().getSession(false);
        if(sesion != null){
            sesion.invalidate();
            return  INICIO;

        }
        return null;
    }
     
    public String solicitarReparacion(){
        if(tallerSeleccionadoToString != null){
            Solicitud s = new Solicitud();
            s.setPlaca(vehiculo.getPlaca());
            s.setIdUsuario(clienteActual.getId());
            s.setTallerString(admin.getTallerFromString(tallerSeleccionadoToString).getNit());
            s.setEstado(Solicitud.ESTADO_SOLICITADA);
            AdministradorSolicitudes ads = AdministradorSolicitudes.getInstancia();
            ads.agregarSolicitud(s);
            return SELECCION_TALLER_CORRECTA;
        }else{
            return SELECCION_TALLER_INCORRECTA;
        }
    }

    public boolean isRequiereTransporte() {
        return requiereTransporte;
    }

    public void setRequiereTransporte(boolean requiereTransporte) {
        this.requiereTransporte = requiereTransporte;
    }
     
    public Cliente getClienteActual() {
        return clienteActual;
    }

    public List<Taller> getTalleres() {
        return talleres;
    }

    public Vehiculo getVehiculo() {
        return vehiculo;
    }

    public void setClienteActual(Cliente clienteActual) {
        this.clienteActual = clienteActual;
    }


    public void setTalleres(List<Taller> talleres) {
        this.talleres = talleres;
    }

    public void setVehiculo(Vehiculo vehiculo) {
        this.vehiculo = vehiculo;
    }
    
}